﻿#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

;;http://www.autohotkey.com/board/topic/35566-rapidhotkey/
RapidHotkey(keystroke, times="2", delay=0.2, IsLabel=0)
{
    Pattern := Morse(delay*1000)
    If (StrLen(Pattern) < 2 and Chr(Asc(times)) != "1")
        Return
    If (times = "" and InStr(keystroke, """"))
    {
        Loop, Parse, keystroke,""   
            If (StrLen(Pattern) = A_Index+1)
                continue := A_Index, times := StrLen(Pattern)
    }
    Else if (RegExMatch(times, "^\d+$") and InStr(keystroke, """"))
    {
        Loop, Parse, keystroke,""
            If (StrLen(Pattern) = A_Index+times-1)
                times := StrLen(Pattern), continue := A_Index
    }
    Else if InStr(times, """")
    {
        Loop, Parse, times,""
            If (StrLen(Pattern) = A_LoopField)
                continue := A_Index, times := A_LoopField
    }
    Else if (times = "")
        continue := 1, times := 2
    Else if (times = StrLen(Pattern))
        continue = 1
    If !continue
        Return
    Loop, Parse, keystroke,""
        If (continue = A_Index)
            keystr := A_LoopField
    Loop, Parse, IsLabel,""
        If (continue = A_Index)
            IsLabel := A_LoopField
    hotkey := RegExReplace(A_ThisHotkey, "[\*\~\$\#\+\!\^]")
    IfInString, hotkey, %A_Space%
        StringTrimLeft, hotkey,hotkey,% InStr(hotkey,A_Space,1,0)
    backspace := "{BS " times "}"
    keywait = Ctrl|Alt|Shift|LWin|RWin
    Loop, Parse, keywait, |
        KeyWait, %A_LoopField%
    If ((!IsLabel or (IsLabel and IsLabel(keystr))) and InStr(A_ThisHotkey, "~") and !RegExMatch(A_ThisHotkey
    , "i)\^[^\!\d]|![^\d]|#|Control|Ctrl|LCtrl|RCtrl|Shift|RShift|LShift|RWin|LWin|Alt|LAlt|RAlt|Escape|BackSpace|F\d\d?|"
    . "Insert|Esc|Escape|BS|Delete|Home|End|PgDn|PgUp|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|AppsKey|"
    . "PrintScreen|CtrlDown|Pause|Break|Help|Sleep|Browser_Back|Browser_Forward|Browser_Refresh|Browser_Stop|"
    . "Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|MButton|RButton|LButton|"
    . "Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2"))
        Send % backspace
    If (WinExist("AHK_class #32768") and hotkey = "RButton")
        WinClose, AHK_class #32768
    If !IsLabel
        Send % keystr
    else if IsLabel(keystr)
        Gosub, %keystr%
    Return
}
